#include <iostream>
using namespace std;

template<int n> struct calc {
	enum Value { N = calc<n-1>::N + n };
};

template<> struct calc<1> {
	enum Value { N = 1 };
};

typedef int (*fun)(int);
int teminator(int n) { return 0; }

int funcptr(int n) {
	static fun f[2] = {teminator, funcptr};
	return n+f[!!n](n-1);
}

class A;
A* Array[2];

class A {
public:
	virtual int sum(int n) {
		return 0;
	}
};

class B : public A {
public:
	virtual int sum(int n) {
		return Array[!!n]->sum(n-1) + n;
	}
};

class T {
public:
	T() { 
		++N;
		S += N;
	}

	static int N;
	static int S;
};

int T::N = 0;
int T::S = 0;

//int main() {
//	int ret0 = calc<5>::N;
//	int ret1 = funcptr(5);
//
//	A a;
//	B b;
//	Array[0] = &a;
//	Array[1] = &b;
//	int ret2 = b.sum(5);
//
//	T* arr = new T[5];
//	int ret3 = T::S;
//
//	return 0;
//}